package com.springlearn.springsourcecode.chap14;


import org.springframework.cglib.core.Signature;

/**
 * @author wtcode
 * @Description
 * @date 2025/4/5 - 15:59
 */
public class TargetFastClass {
    static Signature s0 = new Signature("save","()V");
    static Signature s1 = new Signature("save","(I)V");
    static Signature s2 = new Signature("save","(J)V");
    // 获取目标方法的编号
    // Target
    // save() 0
    // save(int i) 1
    // save(long j) 2
    // signature 包括方法的名字、方法参数、返回值
    public int getIndex(Signature signature){
        if(s0.equals(signature)){
            return 0;
        }else if(s1.equals(signature)){
            return 1;
        }else if(s2.equals(signature)){
            return 2;
        }
        return -1;
    }

    // 根据返回的方法编号，正常调用目标对象的方法
    public Object invoke(int index, Object target, Object[] args){
        if(index == 0){
            ((Target)target).save();
            return null;
        }else if(index == 1){
            ((Target)target).save((int)args[0]);
            return null;
        }else if(index == 2){
            ((Target)target).save((long)args[0]);
            return null;
        }else {
            throw new RuntimeException("无此方法");
        }
    }


    public static void main(String[] args) {

        TargetFastClass targetFastClass = new TargetFastClass();
        int save = targetFastClass.getIndex(new Signature("save", "(I)V"));
        targetFastClass.invoke(save,new Target(),new Object[]{100});


    }
}
